我正在考虑将 idcustomer 添加为 auto_increment,但我不确定这是否是个好主意。
这确实是个好主意。
您的其他列(属性)不一定具有唯一值。换句话说,它们不适合用作自然主键。什么样的值可以作为自然主键?可能是员工编号。产品序列号可能会起作用。纳税人身份证号码(社会安全号码)不起作用:令人惊讶的人数错误地使用了重复的号码。选择真实世界项目作为主键的唯一性标准非常高,以至于大多数数据库设计人员甚至都不会尝试。
所以创建一个保证唯一的主键通常是好的设计。这种键的行话是代理主键。大多数 DBMS 系统,包括 MySQL,都为此提供了自动递增的数字。
您可以选择两种约定之一来命名该id
值。一是调用它id
。另一种是调用它customer_id
(添加的表名_id
)。当您开始在其他表中使用这些值来建立关系时,第二个将帮助您保持直截了当。
例如,您可能有一个销售表。该表可能有以下列:
sales_id autoincrementing pk
customer_id the id of the customer to whom the sale was made. (foreign key)
item_sold description of the item
list_price
discount
net_price
你明白了。阅读有关主键和外键的信息。在“逻辑数据库设计”的行话中,您可以阅读有关实体(客户、销售)和关系的信息。每个表都有自己的一系列自动递增值。
然后,您可以使用这样的查询来找出每个客户的销售额。
SELECT customer.name, customer.first_lastname,
COUNT(sales.sales_id) number_of_sales,
SUM(sales.net_price) revenue
FROM customer
JOIN sales ON customer.customer_id = sales.customer_id
GROUP BY customer.customer_id, customer.name, customer.first_lastname
这里实体与实体具有sales
多对一的关系。这是通过在每一行中都有一个指向客户的属性来实现的。customer
customer_id
sales
将 id 设置为每个表中的第一列也是一种惯例。
约定很好:它们可以帮助下一个人查看您的应用程序。他们也帮助你未来的自己。
注意:我的销售表只是一个示例,展示了自动递增 id 值如何有用。我并没有声称它对于现实世界的销售表来说是一个很好的布局:它不是。