在我的应用程序中,我有一个表来存储用户信息,如姓名、地址、类型(员工、经理、管理员)、UniqueNumber。
我需要为表User中的每个记录在字段UniqueNumber中存储一个介于1和100之间的序列号,表示类型:因此可以存在一个类型= 'Employee‘和UniqueNumber=1的记录,以及一个类型=’经理‘和UniqueNumber=1的记录,但不能存在另一个类型=’Employee‘和UniqueNumber=1的记录。
我在考虑为每种类型使用一个数据库序列。这有助于我管理并发,其中可以同时向更多用户插入一条记录。
这是一个好的解决方案吗?有没有别的选择?
我看到了AtomicInteger类,但我不知道如何对我的表的每一种类型使用它。
谢谢。
发布于 2018-03-28 18:08:44
AtomicInteger只是提供了Integer值的线程安全使用。您的问题与Java没有什么关系,除非您在一次遍历中创建了每个用户实体。如果是这种情况,您可以声明3个int值,并为要创建的每个实体递增它们(如果需要处理并发,则可以声明3个静态或本地AtomicInteger值)。最好的方法是为每个类型创建一个序列,或者使用Max查询获取给定类型的下一个可用值。-->视您的需要而定
当一个类型的值超过100个时会发生什么?
发布于 2018-03-28 18:21:59
我们可以在java中创建这样的代码,但这是不必要的复杂。它涉及到Map和AtomicInteger(),并且您会经常使用incrementAndGet()方法。
另一方面,您可以创建两个表。一个是给UserTypes的,另一个是给用户的。然后,users表可以具有类型的外键。在数据库级别上解决了问题。这很酷,因为数据库将强制执行此约束。
以下是使用MS SQL Server执行此操作的方法:
CREATE TABLE UserTypes (
ID INT Identity(1, 1) NOT NULL,
TypeName VARCHAR(128) NOT NULL,
PRIMARY KEY (ID)
)
CREATE TABLE Usr (
ID INT Identity(1, 1) NOT NULL,
TypeId INT NOT NULL,
MoreData VARCHAR(256) NULL,
CONSTRAINT fk_types FOREIGN KEY (TypeId) REFERENCES UserTypes (ID)
)https://stackoverflow.com/questions/49531385
复制相似问题