规范化具有个体依赖性的数据列

时间:2012-01-20 10:02:59

标签: database-design database-normalization functional-dependencies

该公司为地产代理商设立董事会,例如出售,让董事会。

当代理人发布工作时,董事会地址,拥有董事会的代理人和工作类型都会被存储。

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

// 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!

但是在作业类型表中,SLIP直接依赖于BOARD列,而board列直接依赖于action列。

但是肯定用一把钥匙将所有列单独分成单独的表是不对的吗?

我想我的模糊问题是:

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

2 个答案:

答案 0 :(得分:0)

  

但是在作业类型表中,SLIP直接依赖于BOARD   列,电路板列直接取决于操作列。

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

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来修复它。

答案 1 :(得分:0)

两行“待售”/出售和“待售”/ null与您的陈述相矛盾,即BOARD对SLIP存在功能依赖。