public ForeignKey(Table table, String name, Column[] columns, UniqueKey key, boolean cascade) {
    super(table, name, columns);
    if (key == null) {
      throw new IllegalArgumentException("Unique key cannot be null.");
    }
    m_key = key;
    m_cascade = cascade;

    Column[] fk = getColumns();
    Column[] uk = m_key.getColumns();
    if (fk.length != uk.length) {
      throw new IllegalArgumentException(
          "Foreign columns don't match unique key: fk = " + getSQL() + " uk = " + key.getSQL());
    }

    for (int i = 0; i < fk.length; i++) {
      if (fk[i].getType() == Integer.MIN_VALUE) {
        fk[i].setType(uk[i].getType());
        fk[i].setSize(uk[i].getSize());
      } else {
        if (fk[i].getType() != uk[i].getType() && fk[i].getSize() != uk[i].getSize()) {
          throw new IllegalArgumentException("Foreign columns don't match unique key.");
        }
      }
    }

    m_key.addForeignKey(this);
  }