创建MySQL表ID最佳实践

时间:2020-05-15 10:12:15

标签: python mysql sql

我正在使用mysql(8.0.19)数据库编码一个新的python(版本3.8.2)项目。
这是表创建代码:

    import mysql.connector

mydb = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "mypassword",
    database = "acme_db"
)

mycursor = mydb.cursor()

sql_formula = ("CREATE TABLE employee (employee_id INT AUTO_INCREMENT PRIMARY KEY,"
                                        "first_name VARCHAR(255),"
                                        "last_name VARCHAR(255),"
                                        "email VARCHAR(255),"
                                        "phone_nr VARCHAR(255),"
                                        "hire_date DATE,"
                                        "job_id INTEGER,"
                                        "salary NUMERIC(8,2),"
                                        "commission_pct NUMERIC(8,2),"
                                        "manager_id INTEGER,"
                                        "department_id INTEGER)")
mycursor.execute(sql_formula)

mycursor.execute("CREATE TABLE jobs (job_id INT, job VARCHAR(255))")

mycursor.execute("CREATE TABLE managers (manager_id INT, employee_id INTEGER)")

mycursor.execute("CREATE TABLE departments (department_id INT, department_name VARCHAR(255))")

问题是,关于id的最佳做法是什么?
我的意思是,employee_id是唯一的自动增量pk,据我了解,其他ID呢?用于餐桌工作,经理和部门。
它们不应该与employee_id的定义相同,还是仅仅是INT,我需要照顾这个数字,它不会重复出现,等等吗?
我确实使所有id都具有相同的定义,但是我不能将数据插入表中:

dptFormula = "INSERT INTO depatments (department_name) VALUES (%s)"
acme_departments = [("Accounting"),("R&D"),("Support")]
mycursor.executemany(dptFormula, acme_departments)

我知道了:

Traceback (most recent call last):
  File "c:/Users/Daniel/EmployeeProject/employee_mgt/insert_into.py", line 20, in <module>
    mycursor.executemany(dptFormula, acme_departments)
  File "C:\Program Files\Python38\lib\site-packages\mysql\connector\cursor.py", line 668, in executemany
    stmt = self._batch_insert(operation, seq_params)
  File "C:\Program Files\Python38\lib\site-packages\mysql\connector\cursor.py", line 613, in _batch_insert
    raise errors.ProgrammingError(
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

1 个答案:

答案 0 :(得分:1)

您已经在使用一种最佳实践。每个表都有一个用于主键的自动递增整数,并且您在表(<Grid container> <Grid item xs={2}>...</Grid> <Grid item xs={10}>...</Grid> </Grid> ,'job_id employee_id id`)之后命名了这些键

每个表都有其自己的自动递增ID值序列。如果您尝试使用, not justemployees表中查找内容,那么您将毫无用处。但是你可以做这样的事情

job_id

利用员工与工作之间的关系。 SELECT e.first_name, e.last_name, j.job FROM employee e JOIN job h ON e.job_id = j.job_id 所表示的表行之间的关系是术语关系数据库管理系统”的原因。

@Akina在评论中指出,应为主键列使用这种定义。

JOIN job h ON e.job_id = j.job_id

这是个好建议。