1

私は3つのテーブルを作成しようとしています:

ユーザー

  • ユーザー名
  • ユーザーID

カテゴリー

  • カテゴリー
  • カテゴリID
  • userID (ユーザー テーブルを参照)

経費

  • 日にち
  • 経費ID
  • カテゴリ ID (カテゴリ テーブルを参照)は機能し ません!
  • userID (ユーザーテーブルを参照)動作してい ません!

これが私のcreateステートメントのコードです。「ON DELETE ...」句を経費テーブルに追加するまで、すべてがうまくいきました。

private final static String createUsersTable = 
"CREATE TABLE users ("+
     "userID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "+
     "username VARCHAR(255) NOT NULL UNIQUE " +
")";
private final static String createCategoriesTable = 
    "CREATE TABLE categories ("+
    "categoryID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "+
    "category VARCHAR(255) NOT NULL, " +
    "userID INTEGER NOT NULL, " +
    "FOREIGN KEY (userID) REFERENCES users (userID) ON DELETE CASCADE"+
")";
private final static String createExpensesTable =
    "CREATE TABLE expenses ("+
    "expenseID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "+
    "amount INTEGER NOT NULL, "+
    "date VARCHAR(255) NOT NULL, "+
    "categoryID INTEGER, "+
    "userID INTEGER NOT NULL, "+
    "FOREIGN KEY (categoryID) REFERENCES categories (categoryID) ON DELETE SET NULL, "+
    "FOREIGN KEY (userID) REFERENCES users (userID) ON DELETE CASCADE"+
")";

これは、テーブルを作成しようとしたときに発生する例外です。

java.sql.SQLSyntaxErrorException: 外部キー 'SQL110915104641092' は無効です。'削除規則の制限により、テーブルをテーブル ME.USERS の従属として定義できません。(リレーションシップにより、テーブルは複数のリレーションシップを介して指定されたテーブルに削除接続され、既存のリレーションシップの削除規則は SET NULL になります。) '。

SQL データベースに関する基本的な何かが欠けているに違いありません。何?

4

2 に答える 2

1

expensesを指しcategories、これは を指しusersます。したがって、usersinの外部キーを持つことexpensesは冗長です。SET NULLこのエラーは、との間の競合するアクションに起因すると考えられますCASCADE

を削除するuserと、categoriesそれを参照する が削除され ( のためCASCADE)、categories外部キーが in に設定さNULLれますexpenses( のためSET NULL)。しかし、同時に、 を削除するuserと、expensesそれを参照している も削除されます ( のためCASCADE)。

ワンライナー:何をしようとしているかに応じて、またはusersのいずれかで外部キーを削除します...expensescategories

于 2011-09-15T18:21:13.420 に答える
0

Categoriesでは、 の候補キーに加えて、とcategoryIDの複合でスーパー キーを作成します。表では、複合キーのみを参照してください。categoryIDuserIDExpenses

于 2011-09-16T08:14:50.877 に答える