0

The 是一家为房地产经纪人竖立董事会的公司,例如出售,出租董事会。

代理发布职位时,会存储版块地址、拥有版块的代理和职位类型。

注意:属性前面的星号是主键,后面的星号是外键。并非所有表格都显示

// background info to help understand the project more
AGENTS
*agent_id
agency_name
agency_office
address_id*

BOARDS
*board_id
client_id*
address_id*

PENDING_JOBS
*job_id
board_id*
job_type_id*
notes
submitted_on

现在我有一个工作类型表。每个工作都有一个:

  • board_id (添加客户和董事会所在的位置)
  • job_type_id(是否放板、取下、更换、添加销售单等)

这是我的工作类型表

JOB_TYPES
*job_type_id
action
board
slip

并且数据看起来像这样:(省略行)

JOB_TYPES
id | action       | board    | slip
-----------------------------------
1  | up           | for sale | sold
2  | up           | to let   | let by
3  | up           | for sale | null
4  | up           | to let   | null
5  | down         | null     | null
6  | service call | null     | null

我一直在尝试有效地规范化我的数据库,并且根据规范化,您应该在表中只有直接依赖于 ID 的数据,例如 agent_name 和 agent_office 直接依赖于 agent_id!

但是在job types表中,SLIP直接依赖于BOARD列,而board列直接依赖于action列。

但是,用一个键将所有列挑出到单独的表中肯定是不对的吗?

我想我的模糊问题是:

Is this okay?
Or in the real world, do people use better method or storing data like this?
4

2 回答 2

0

“for sale”/sold 和“for sale”/null 两行与您的说法相矛盾,即从 BOARD 到 SLIP 存在功能依赖关系。

于 2012-01-20T16:05:28.180 回答
0

但是在job types表中,SLIP直接依赖于BOARD列,而board列直接依赖于action列。

依赖是规范化中的一个技术术语;它有一个确切的含义。这是您的部分数据。

JOB_TYPES
id | action       | board    | slip
-----------------------------------
1  | up           | for sale | sold
2  | up           | to let   | let by
3  | up           | for sale | null
4  | up           | to let   | null

在规范化中,问题是,

  • “行动决定董事会吗?” 方法
  • “给定'action'的一个值,我是否知道'board'的一个且只有一个值?”

答案显然是“不”。给定action = 'up',您至少知道 'board' 的两个不同值:'for sale' 和 'to let'。所以那里没有功能依赖。

话虽如此,但我不得不说工作类型表确实看起来有点奇怪。我怀疑您将多个独立的事实捆绑到一张表中,但在做出判断之前,我希望看到更多具有代表性的数据。(想想“放板”、“放单”、“取下板”、“取下单”。)

将多个独立的事实捆绑到一个表中会创建一个多值依赖关系,您可以通过规范化为 4NF 或 5NF 来修复它。

于 2012-01-20T11:34:10.607 回答