数据库设计,客户(公司/个人)在同一table?
Database design, customers (companies / individuals) in the same table?
发现可能重复:Database design, multiple types of customers in the same table
大家好。
我实际上正在寻找一种创建包含两种客户的数据库的好方法:个人和公司。这是一个网站,我正在使用 CodeIgniter 框架(不确定精确是否重要)。
我只会写“重要”的字段,以确保更容易理解我正在尝试做的事情。
- 这两种客户都有这些必需的数据:电子邮件(这是
登录), 密码
- 对于公司:siret(SIRET 号码),name
- 对于个人:first_name、last_name
所以,我想知道是将所有内容放在一个 table 中(根据客户类型使用 NULL 字段)还是分成 2 个 table 更好(公司,个人)与“主人”table(帐户)。
我的单身想法table
+----------------+--------------------+
| account | |
+----------------+--------------------+
| id (PK) | |
| email (UNIQUE) | |
| password | |
| siret (UNIQUE) | NULL if individual |
| company_name | NULL if individual |
| first_name | NULL if company |
| last_name | NULL if company |
| is_company | necessary ? |
+----------------+--------------------+
如果first_name和last_name为空,则为个人.
如果 siret 和 company_name 为空,则为 company.
或者直接使用 is_company 字段 ?
我对多个table的想法
+----------------+--------------------+--------------------+
| account | company | individual |
+----------------+--------------------+--------------------+
| id (PK) | account_id (PK/FK) | account_id (PK/FK) |
| email (UNIQUE) | name | first_name |
| password | siret (UNIQUE) | last_name |
| is_company ? | | |
+----------------+--------------------+--------------------+
在这里,当创建一个新帐户时,它将填充 2 tables :account 和 company 或 个人关于客户类型。
我想在这种情况下我们需要 运行 2 个查询来获取特定客户的所有数据。
我不知道什么是最好的方法,也不知道是否有一种“常用标准”。但我可以肯定的是,如果能得到您的意见,我将不胜感激。
继续阅读 Table Inheritance。单一 Table 继承很好也很简单。
create table parties (
party_id int primary key,
type text not null, -- use a check constraint or foreign key in real life
individual_given_name text null,
individual_surname text null,
organization_legal_name text null,
organization_siret text null
);
在上面,根据参与方类型使用检查约束来确保完整性。
其他类型的团体可以是公司部门、政府机构或个人团体(如家庭)。
"Accounts" 不是一个好用的术语,因为它在计算中有多种含义。用户可能更好。
create table users (
user_id int primary key,
email_address text not null unique,
password_hash text not null,
party_id int not null references parties(party_id)
);
发现可能重复:Database design, multiple types of customers in the same table
大家好。
我实际上正在寻找一种创建包含两种客户的数据库的好方法:个人和公司。这是一个网站,我正在使用 CodeIgniter 框架(不确定精确是否重要)。
我只会写“重要”的字段,以确保更容易理解我正在尝试做的事情。
- 这两种客户都有这些必需的数据:电子邮件(这是 登录), 密码
- 对于公司:siret(SIRET 号码),name
- 对于个人:first_name、last_name
所以,我想知道是将所有内容放在一个 table 中(根据客户类型使用 NULL 字段)还是分成 2 个 table 更好(公司,个人)与“主人”table(帐户)。
我的单身想法table
+----------------+--------------------+
| account | |
+----------------+--------------------+
| id (PK) | |
| email (UNIQUE) | |
| password | |
| siret (UNIQUE) | NULL if individual |
| company_name | NULL if individual |
| first_name | NULL if company |
| last_name | NULL if company |
| is_company | necessary ? |
+----------------+--------------------+
如果first_name和last_name为空,则为个人.
如果 siret 和 company_name 为空,则为 company.
或者直接使用 is_company 字段 ?
我对多个table的想法
+----------------+--------------------+--------------------+
| account | company | individual |
+----------------+--------------------+--------------------+
| id (PK) | account_id (PK/FK) | account_id (PK/FK) |
| email (UNIQUE) | name | first_name |
| password | siret (UNIQUE) | last_name |
| is_company ? | | |
+----------------+--------------------+--------------------+
在这里,当创建一个新帐户时,它将填充 2 tables :account 和 company 或 个人关于客户类型。
我想在这种情况下我们需要 运行 2 个查询来获取特定客户的所有数据。
我不知道什么是最好的方法,也不知道是否有一种“常用标准”。但我可以肯定的是,如果能得到您的意见,我将不胜感激。
继续阅读 Table Inheritance。单一 Table 继承很好也很简单。
create table parties (
party_id int primary key,
type text not null, -- use a check constraint or foreign key in real life
individual_given_name text null,
individual_surname text null,
organization_legal_name text null,
organization_siret text null
);
在上面,根据参与方类型使用检查约束来确保完整性。
其他类型的团体可以是公司部门、政府机构或个人团体(如家庭)。
"Accounts" 不是一个好用的术语,因为它在计算中有多种含义。用户可能更好。
create table users (
user_id int primary key,
email_address text not null unique,
password_hash text not null,
party_id int not null references parties(party_id)
);