【发布时间】:2020-11-09 22:10:19
【问题描述】:
我将创建三个表。这些表属于一个类别名称。链接到“公司”类别的“部门”类别和链接到“部门”类别的“部门_单位”类别。用户将首先选择Company,然后选择department,然后选择department_unit。您认为我在下面写的查询正确吗?还是我需要编写一个不同的更好的查询? 非常感谢。
create_table_company= '''CREATE TABLE company(
ID SERIAL PRIMARY KEY ,
NAME VARCHAR NOT NULL ,
); '''
create_table_department = '''CREATE TABLE department (
ID SERIAL PRIMARY KEY ,
NAME VARCHAR NOT NULL ,
company_id BIGINT,
FOREIGN KEY(company_id) REFERENCES COMPANY(id)); '''
create_table_department_unit = '''CREATE TABLE department_unit(
ID SERIAL PRIMARY KEY ,
NAME VARCHAR NOT NULL ,
department_id BIGINT,
FOREIGN KEY(department_id) REFERENCES DEPARTMENT(id)); '''
【问题讨论】:
-
您的代码看起来不错。你有什么具体问题吗?
-
恐怕在性能方面。如果我在最后一个表中保存其他表外键。我将在单个表上进行查询。但是,这样一来,我会同时在 3 个表中运行查询。我不明白哪个是对的
-
建议稍作调整(恕我直言)。您的所有 ID 都定义为序列号。 Serial 是将列定义为 integer 的快捷方式,创建一个整数序列并将该序列设为默认值。您的 FK 被定义为 bigint。并不是该设置不可行或有错误。然而,一致性很重要。我会将 ID 更改为 Bigserial 或将 FK 更改为整数。更好的是,如果您使用的是 v10 或更高版本,请将 ID 更改为 Generated as Identity 列。
标签: python sql postgresql psycopg2