Tho*_*s O 30 erd database-design
我曾经像这样标记数据库中的列:
user_id
user_name
user_password_hash
Run Code Online (Sandbox Code Playgroud)
为了避免在连接两个表时发生冲突,但后来我学到了更多关于如何为表设置别名的知识,我不再这样做了。
在数据库中标记列的有效方法是什么?为什么?
Spr*_*dzy 33
在您的情况下,前缀用户是多余的。我们(负责的开发人员)知道这是表用户,那么为什么要user_在每个字段前添加前缀呢?
我建议你用更自然的方法来做。
一个人的特征是什么:姓氏、名字、出生日期、国籍等...
汽车的特征是什么:型号、年份、颜色、能源等...
您的专栏应该命名为尽可能自然,这将使架构对每个人、您和您之后的人都更加清晰。这也称为维护阶段,您可以做的任何使维护更容易的事情通常都是值得的。
Dav*_*all 17
除了 Spredzy 的评论之外,将您的主键标记为相同 ( ID ),这样当您即时编写查询时,您可以轻松回忆 (u.ID=c.ID) 而不必查找“Was it countryID , country_ID, countries_ID, countryID, ?"
我完全同意 David Hall 对 Spredzy 出色答案的补充。简单和自然是要走的路。如果您也自然地命名表格,表格混淆应该不是问题。
当您可以拥有 users.id 和 cars.id 时,拥有 users.user_id 和 cars.car_id 毫无意义
让我们看看,用你的例子,它看起来像这样:
USERS
----
id
username,
password
registration_date
Run Code Online (Sandbox Code Playgroud)
我使用大写的表名。这让我可以轻松识别表格。我刚刚命名的列分别代表它所代表的内容。我尽量不使用数字或包含任何前缀或后缀。这将使查询变得简单而直接。
顺便说一句,我认为你应该找到一些你喜欢的风格并坚持下去。如果您经常更改它,那么您将拥有更混乱的 DB 模式。
我认为在数据库模式中,每个列都应该有一个跨表的唯一名称。这有几个原因:
从建模的角度来看:您从一系列属性开始,然后将其规范化为表格。随着时间的推移,您可能会进一步反规范化或规范化,或者引入视图或物化视图,或者引入新表。如果所有列名都是唯一的,这永远不会成为问题。
您可以使用以下连接语法:a JOIN b USING (a_id) JOIN c USING (a_id). 非常方便,也有助于解决以下几点。
如果您运行具有大量连接的查询或使用 来创建物化视图SELECT *,您将永远不会(好吧,也许很少)发生冲突。想想加盟person.name,product.name,country.name,等Urgh。
一般来说,如果您有大量查询,则很难跟踪id各处的含义。
与其他人一样,我建议您不要将表名作为列的一部分。除非您有数百个表都具有大部分相似的列名:如果您有几十个表都带有标题为 ID 的列,那么一定要在它们前面加上表名。
我最近离开了一家公司,其中一位开发人员更喜欢用 pk 和 fk 作为主键和外键列的前缀。这导致了一些令人厌恶的情况,其中列以 pkfk 开头(通常是基于 2 列的复合主键,其中一列是另一个表的外键)。
我在一个环境中工作,每个列名都以从表名派生的前缀开头,这不是我的发明,但我很满意。
理想情况下,列名在数据库中的所有表中都是唯一的。
一些观察:
一般想法:最重要的是每个命名约定的一致性: - 单数与复数(适用于表而不是列) - 识别主键和外键(它们构建结构与数据库的内容) - 在以下情况下保持一致您存储字符串和同一字符串的短变体 - 与标志、状态等保持一致。