Abe*_*ler 37 database database-design terminology
我刚刚给我们的头数据库人员创建了一个DB数据库图表,并在其上放了一堆注释,建议我重命名某些表,因此很清楚它们是查找表(在表的开头添加"lu")名称).
我的问题是这些不符合我认为查找表的定义.我一直认为查找表基本上是一组没有定义任何关系的选项.例:
luCarMake
-----------
id Make
-- ---------
1 Audi
2 Chevy
3 Ford
Run Code Online (Sandbox Code Playgroud)
我工作的数据库人员建议我重命名几个表,这些表只是将一个表作为查找表的一个表.示例(下面的Location_QuadMap):
Location
----------
LocationId
name
description
Location_QuadMap <-- suggesting i rename this to luLocationQuad
----------------
QuadMapId
LocationId
luQuadMap
---------
QuadMapId
QuadMapName
Run Code Online (Sandbox Code Playgroud)
假设她误读了图表还是有其他我不知道的定义,这是安全的吗?
OMG*_*ies 23
选择你的战斗,但是我要求这个人澄清命名惯例,看他们建议对一对多和多对多的关系使用相同的约定.看起来任何外键关系意味着涉及"查找"表.
如果那是其他数据库的命名约定,那么我就不会推动我的运气.
Pat*_*and 13
查找表通常是一个表,作为某个东西的"主列表",您可以使用它在exachange中查找业务键值(如"Make"),以获取其他一些用于其标识符的标识符(如id列) table的外键列.
基本上,你会有一些东西要"查找"并将其换成其他东西.
另一方面,location_quadmap是一个桥表,正如其他人已经说过的那样,当你在两个实体之间存在多对多关系时,会使用它.如果你称之为查找表,那么我会说任何表都可以称为查找表.这些表只包含其他表的标识符,因此您必须首先在一个表上查找id,查找桥表中匹配的id,然后在中查找匹配的行.第3桌?似乎对这个术语有点过分了.
查找表的一种用途是存储其他enum
值。
说,我们有一个Status
枚举。
我们没有在数据库中的每条记录中保存“未开始”、“进行中”、“已完成”、“发回”……,而是只保存整数 1、2、……。
在编程方面,像实体框架这样的 ORM 可以轻松地将底层整数转换为 Enum 类型。
这种方式的缺点是无法从数据库端读取整数值。在解决这个问题时,我们添加了一个查找表,如
Id Status
1 Not Started
2 In Progress
...
Run Code Online (Sandbox Code Playgroud)
这样我们的 DBA 就可以有一个字典来“查找”,通过加入这个查找表来显示状态文本。
马克·拜尔斯对该表有正确的定义。基本上是一个相交表。请参阅任何数据库教科书。
但实际上,我曾与许多 DBA/架构师合作过,大多数人都发明了自己的做事风格,并且不愿意听到其他任何内容。像缩进规则、SQL 语句的大小写、表的命名约定(甚至是非常糟糕的)、归档策略等……如果它们控制着数据库,你基本上别无选择。您可以提到它是一个相交表,指向适当的文献,但最终如果她想将其称为 MyStupidlyLongAndPointlessPrefixForTablesBecauseICan_Lookup_Location_Quadmap 并坚持那么您无能为力。
所以试着向她指出这一点,但如果她不同意,就不要太当真......
我只是想到了别的事。查找表(我们的定义)通常也称为代码表。所以她可能会调用相交表查找表和查找表代码表。在这种情况下,你可能必须学习说她的语言......