0

我正在尝试决定多值属性的主键选择并有一个快速的问题:

鉴于:

Customer (cid, name, address, town, post code, email)
Customer_Number(cid, phone_number)

其中 cid 是客户的主键,我可以将 Customer_Number 关系的主键定义为“phone_number”,因为这是唯一标识每条记录的最小属性。我假设没有两个客户可以拥有相同的电话号码。

我不确定这一点,因为我觉得 cid 也应该包括在内。

将不胜感激任何建议。

谢谢

4

3 回答 3

0

我假设没有两个客户可以拥有相同的电话号码。

即使这是正确的(如果您的客户提供相同的号码,例如相同的家庭,相同的公司部门,则可能不是这种情况),但这并不妨碍用户输入错误。

“代理”与“非代理”的关键讨论可能是一个漫长而激烈的讨论,但一个好的经验法则是不要使用最终用户分配或输入的列,因为人为错误会进入玩。就个人而言,我是代理键的忠实拥护者,并且几乎总是使用它们,但您的需求可能另有规定。

而且您的实际问题与代理或其他方式关系不大,而更多地与 FK 关系有关,因此请将其视为一个旁注。

于 2013-10-23T08:59:23.827 回答
0

CustomerID 必须作为您在 Customer_Number 表中的外键。我想您可以在该表中创建一个名为 Customer_Number_ID 的新列,因为电话号码不一定是唯一标识符。话虽如此,您可能有 1 个客户有多个电话号码,因此您可能需要添加该列,以便在需要时可以将两者(Customer_number_id 和 CustomerID)的组合用作复合键。

于 2013-10-23T09:01:12.520 回答
0

将 cnid 列作为 PK 添加到 Customer_number 表并将 cid 用作 FK。

于 2013-10-23T09:01:58.510 回答