如何创建属于一个用户SQL的许可证值

时间:2013-11-10 22:03:15

标签: java mysql sql swing

我有一个与MySQL交互的java swing应用程序,我希望能够创建允许用户使用该应用程序的许可证密钥,用户只能拥有一个许可证编号,这是我到目前为止在SQL中所拥有的

CREATE TABLE User (
    id INT AUTO_INCREMENT NOT NULL,
    License VARCHAR(100) NOT NULL,
    PRIMARY KEY(id)
);

CREATE TABLE Address (
    id INT AUTO_INCREMENT NOT NULL,
    LicenseNumber VARCHAR(255) NOT NULL,
    FOREIGN KEY (LicenseNumber) REFERENCES User(id),
    PRIMARY KEY(id)
 );

这是正确的解决方案吗?还有什么是用SQL生成实际许可证号的好方法?

这是我对我的问题的解决方案: 这是SQL:

CREATE TABLE User(
   id int NOT NULL auto_increment primary key,
   LicenseID VARCHAR(100) NULL,
   CONSTRAINT fk_license_number FOREIGN KEY (LicenseID) REFERENCES License(LicenseNumber)
 );

CREATE TABLE License(
   id INT AUTO_INCREMENT NOT NULL,
   LicenseNumber VARCHAR(100) NOT NULL UNIQUE,
   PRIMARY KEY (ID)
);

对于LicenseNumber,我继续在我的java代码中使用sha1 Java String to SHA1

1 个答案:

答案 0 :(得分:0)

您应该使用许可证ID作为外键而不是许可证号码。因此,架构应该看起来像

CREATE TABLE License
(
  id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
  LicenseNumber VARCHAR(40) NOT NULL UNIQUE
);
CREATE TABLE User
(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  LicenseID INT, 
  CONSTRAINT fk_license_number FOREIGN KEY (LicenseID) REFERENCES License(id)
);

如果需要,可以使用SHA1()函数在db-side上生成SHA1。 E.g:

INSERT INTO License (LicenseNumber) VALUES (SHA1('Lisence1'));

这是 SQLFiddle 演示