This is a table for a catalog of medicines. Some have a pharmaceutical brand, others are generic (i.e. they will never have brand information) 
      
    CREATE TABLE medicine (
       id serial PRIMARY KEY,
       name text NOT NULL,
       brand_id integer
       CONSTRAINT brand_fk FOREIGN KEY (brand_id) REFERENCES brand (id)       
    );

    CREATE TABLE brand (
      id serial PRIMARY KEY,
      name text NOT NULL
    );

For storing generic medicines, e.g. `abc` & `xyz`, there are 2 options:

1. Use NULL for the Foreign Key `brand_id`

    `INSERT INTO medicine (name, brand_id) VALUES ('abc', NULL)`<br>
    `INSERT INTO medicine (name, brand_id) VALUES ('xyz', NULL)`


2. Insert just 1 empty string in brand name and use that for all generic medicine's brand_id

    `INSERT INTO brand (id, name) VALUES (1, '')`<br>
    `INSERT INTO medicine (name, brand_id) VALUES ('abc', 1)`<br>
    `INSERT INTO medicine (name, brand_id) VALUES ('xyz', 1)`
    
From what I've read on StackExchange, it seems like `1` is the general way of doing this. However if I want a unique index on medicine name & brand_id, I'll have to use [partial indexes][1] (i.e. 2 indexes respectively where `brand_id IS NULL` & `brand_id is NOT NULL`).     

If I go with the second approach, I can achieve it with a single index. 

Is there any other advantage / disadvantage of either of these approaches. I feel the second method is unconventional and there might be some trouble that I'll discover later along the way. 

**P.S.** I've used the example of medicines to illustrate my query but I want to understand the technical merits of the solution purely from a database standpoint i.e. without going into a discussion of which approach would be better for medicine example.


  [1]: https://dba.stackexchange.com/a/9760/52114