你必须区分属性和实体。一个实体是一个东西 – 通常是一个名词。属性更像是一条描述信息。在数据库术语中,entity = table,attribute = field / column。
有一个单独的表,某些事情,让我们使用导演,作为一个例子,称为规范化。虽然在某些情况下可能会很好,但在其他情况下可能是不必要的(通常会使查询更复杂 – 您必须加入所有内容,而且速度较慢)。
在这种情况下,不需要年表,因为一年以外没有其他属性,除了年份本身,你会存储。最好把这个规范化,把年份存放在电影表里。
另一方面,导演是不同的。也许你想要存储导演的名字,姓氏,出生日期,死亡日期(如果适用)等等。你显然不想在每次进入电影时输入导演的出生日期指导,所以有一个单独的实体为董事是有道理的。
即使你不想存储关于导演的所有这些信息(你只是想要他们的名字),有一个单独的表(并使用代理键 – 我会得到一秒)是有用的,因为它防止排版错误和重复 – 如果您的某人的名字拼写错误或输入不同(第一,最后一个vs最后一个),那么如果您尝试查找他们指示的其他电影,您将失败。
使用表格的代理键(主键)通常是一个好主意。匹配整数比匹配字符串要快得多。它还允许您自由更改名称,而不必担心存储在其他表中的外键(ID保持不变,因此您不必执行任何操作)。
你真的可以把这个设计看得很远,而且这一切都是为了弄清楚你想要存储的内容。
例如,不是每部电影都有一个导演,有些电影有多个导演,所以电影和导演之间会有多对多的关系,所以你需要一张表格,例如:
films_dir