我正在开发一个我有多种类型用户的应用程序。他们都需要以下数据:
id | email | last_login
除了这些数据,每个数据都有一些特定类型的数据。例如,我有一个user
类型的附加数据:
first_name | last_name
以及包含其他数据的shop
类型:
shop_name | adress | phone | website
最后是一个类型供应商
supplier_name | adress | phone | category
我一直在尝试找到一个解决方案,我的第一个想法是创建一个表并且有一个额外的列extras
和一个JSON数据列表 - 但这对于SQL排序来说是不好的。
我怎样才能以正确的方式做到这一点?
答案 0 :(得分:0)
您可以定义一个抽象超类客户端,其中包含3个属性:
abstract class Client {
int id;
string email;
date last_login;
}
然后你可以定义三个独立的孩子,每个孩子代表你所需要的一个类型。因此,如果您遵守面向对象的概念,这将毫无问题地得到解决。是自己使用ORM还是处理数据访问层?
答案 1 :(得分:0)
一种简单的方法是为包含必要列的每种类型创建一个表。此方法将复制每个表中的相同列,并包含不同的列。
所以你要创建三个表:
USER (id | email | last_login)
SHOP (id | email | last_login | shop_name | adress | phone | website)
SUPPLIER (id | email | last_login | supplier_name | adress | phone | category)
然后,无论使用何种语言,您都可以建立一个仅包含表中通用信息的对象。所以基本上只用id, email, last_login
创建一个对象。如果您选择的语言支持继承,则可以扩展此基础对象以包括特定派生类的字段。
有关数据库中继承建模的其他方法,请参阅此post。
答案 2 :(得分:0)
您已经以适当的方式划分了数据。
User
----
User ID
Email
Last Login Timestamp
Person
------
User ID
Last Name
First Name
Shop
----
Shop ID
User ID
Website
Supplier
--------
Supplier ID
User ID
Supplier Name
Category ID
Category
--------
Category ID
Category Name
Address
-------
Address ID
Address
Phone
-----
Phone ID
Phone
ShopAddress
-----------
Shop ID
Address ID
ShopPhone
---------
Shop ID
Phone ID
SupplierAddress
---------------
Supplier ID
Address ID
SupplierPhone
-------------
Supplier ID
Phone ID
商店和供应商可以拥有多个地址和多个电话号码。