2

MySQL と対話する Java Swing アプリケーションがあり、ユーザーがアプリケーションを使用できるようにするライセンス キーを作成できるようにしたいのですが、ユーザーはライセンス番号を 1 つしか持つことができません。

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

4

1 に答える 1

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 側で SHA1 を生成できます。例えば:

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

これがSQLFiddleのデモです

于 2013-11-11T03:19:11.590 に答える