0

我正在开发一个应用程序,其中有多种类型的用户。他们都需要以下数据:

id | email | last_login

除了这些数据,每个都有一些特定类型的数据。例如,我有一个user带有附加数据的类型:

first_name | last_name

以及shop带有附加数据的类型:

shop_name | adress | phone | website

最后是类型供应商

supplier_name | adress | phone | category

我一直在尝试找到一个解决方案,我的第一个想法是创建一个表并有一个extras带有 JSON 数据列表的额外列 - 但这对于 SQL 排序目的不利。

我怎样才能以正确的方式做到这一点?

4

3 回答 3

0

您可以定义一个抽象的超类客户端,其中包含三个共享的属性:

abstract class Client {
    int id;
    string email;
    date last_login;
}

然后,您可以定义三个独立的子级,每个子级代表您所需的类型之一。因此,如果您遵守面向对象的概念,这将毫无问题地解决。是使用 ORM 还是自己处理数据访问层?

于 2013-08-03T09:55:09.710 回答
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)

然后,无论您使用何种语言,您都可以建立一个仅包含表中通用信息的对象。所以基本上用 just 创建一个对象id, email, last_login。如果您选择的语言支持继承,则可以扩展此基础对象以包含特定派生类的字段。

这称为具体表继承

有关在数据库中建模继承的其他方法,请参阅这篇文章

于 2013-08-03T09:56:47.670 回答
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

一家商店和供应商可以有多个地址和多个电话号码。

于 2013-08-03T09:58:14.777 回答